import axios from 'axios'
import { getToken } from '../utils/auth'
import { Navigate } from 'react-router-dom'
import { logout } from '../store/actions/user'
import store from '../store/index'

const http = axios.create({
    baseURL: process.env.REACT_APP_URL,// 获取环境变量中的URL
    timeout: 5000
})

// 添加请求拦截器
http.interceptors.request.use(function (config) {
    let token = getToken()
    if (token) {
        config.headers.Authorization = `Bearer ${token}`
    }
    // 在发送请求之前做些什么
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

http.interceptors.response.use(
    async res => {
        if (res.status === 401) {
            try {
                await store.dispatch(logout())
                // 在适当的位置使用Navigate组件
                return <Navigate to='/login' />
            } catch (error) {
                console.log(error);
            }
        }
        return res.data;
    },
    error => {
        if (error.response.status === 401) {
            console.log('退出登录');
            store.dispatch(logout())
            return <Navigate to='/login' />
        }
        console.error('请求发生错误:', error);
        return Promise.reject(error);
    }
)

export { http }